package com.xiangge;
/*
     赋值运算符：
        -- 普通的赋值运算符： =
            明确： java中, = 是赋值号 , == 才是等于
            使用：将 = 右边的值、表达式 复制 给 左边的变量接收
            运算顺序： 先算赋值号右边, 再将右边的结果赋值给左边

        -- 特殊的赋值运算符：+= , -= , *= , /= , %=
            明确： 特殊的赋值运算符  = 二元算术运算符 + 普通的赋值运算符 , 符号中间不能空格
            以+=为例：   不建议
               a += b ;    等效于：a = (a的类型)(a + (b));      先让b表达式的结果运算出来,再和a相加然后赋值给a,隐含了强制类型转换
               a -= b ;    等效于：a = (a的类型)(a - (b));
               a *= b ;    等效于：a = (a的类型)(a * (b));
               a /= b ;    等效于：a = (a的类型)(a / (b));
               a %= b ;    等效于：a = (a的类型)(a % (b));

            结论: 特殊的赋值运算符,隐含了强制类型转换

            【随堂练习】
                1、交换两个变量的值（用两种方式实现）。
                int a = 3 , b = 5;    ---> a = 5 , b = 3;

                方式一： 使用临时变量temp         推荐
                    优点：思路简单
                    缺点：浪费内存
                方式二： 采用一加两减公式
                    优点： 节约内存
                    缺点： 思路比较复杂

                 方式三： 采用异或位运算    后面再讲
            【随堂练习】
                1、获取三个学生的成绩，并计算三个学生成绩的平均分。
                    分析：
                       1. 键盘录入三个学生的成绩 ：  score1 , score2 , score3
                       2. 求平均分：   double avg = (score1 + score2 + score3) / 3;
            【常见面试题】
                1、short num = 11; num = num + 1; 和short num = 11; num += 1;哪一个正确呢？ 第二个正确
                说明： byte , short , char类型的变量做算术运算会自动提升为int类型
                num += 1;   -->  num = (short)(num + 1);

                2、int sum += 30; 请问这行语句语法是否正确？？？
 */
public class OperatorDemo2 {
    public static void main(String[] args) {
         //
         int sum = 19;
         sum += 30; //  sum = sum + 30;
    }
    public static void main3(String[] args) {
        byte num1 = 10;
        byte num2 = 20;
        byte sum = (byte) (num1 + num2);
        System.out.println("sum = " + sum);
    }
    public static void main2(String[] args) {
        int a = 3, b = 5;
        // 方式一： 使用临时变量temp 实现a和b变量值交换
        /*int temp = a;
        a = b;
        b = temp;*/
       /* a = a + b ;
        b = a - b ;
        a = a - b;*/

        System.out.println("a = " + a + " ,b = " + b); // a = 5 , b = 3
    }
    public static void main1(String[] args) {
       // int num = 5 / 2;

        byte a = 3;
        int  b = 5;
       /* a += b; // a = a + b;
        System.out.println("a = " + a); // a = 8*/

        // a *= b + 2; // 1. a = a * b + 2;    2. a = a * (b + 2)   √
        a = (byte) (a * (b + 2)); // Alt  + Enter

        System.out.println("a = " + a);// 17      21

    }
}
